#region Copyright & License

//
// Author: Ian Davis <ian.f.davis@gmail.com> Copyright (c) 2007-2008, Ian Davs
//
// Portions of this software were developed for NUnit. See NOTICE.txt for more
// information. 
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//

#endregion

#region Using Directives

using System.Collections;
using Ensurance.Constraints;

#endregion

namespace Ensurance
{
    public interface IMessageWriter
    {
        void DisplayDifferences<T>( Constraint<T> constraint );

        void WriteActualValue( object actual );

        void WriteConnector( string connector );

        void WritePredicate( string containing );

        void WriteExpectedValue( object expected );

        void Write( string unique );

        void WriteMessageLine( string differ_1, int length, int mismatch );

        void WriteMessageLine(string p, int p_2, int p_3, int mismatch);

        void DisplayStringDifferences(string expected, string actual, int mismatch, bool CaseInsensitive);

        void WriteMessageLine( int indent, string type_1, string expected );

        void WriteMessageLine( int indent, string type_2, string expected, string actual );

        void WriteModifier( string @case );

        void DisplayDifferences( object expected, object actual, object tolerance );

        void DisplayDifferences( object expected, object actual );

        void WriteMessageLine(string p, long p_2, long offset);

        void WriteCollectionElements( ICollection actual, int point, int i );

        int MaxLineLength { get; }
    }
}